STAAD.Pro Help

OS. Microsoft Excelマクロの例

長方形の鉄筋コンクリートビームの耐力をチェックするために使用できるMicrosoft Office Excelスプレッドシート。

このスプレッドシートファイルでは、鉄筋が既に配置された長方形のコンクリートビームの曲げ耐力をチェックします。一連の荷重ケースから生成される最大サグモーメントに対する耐力がチェックされます。ビームの解析はSTAAD.Proで行われます。OpenSTAADとVBAを使用して、その結果を抽出してExcelにリンクします。

  1. STAAD.Proで、スタートページの「開く」タブにある「サンプルモデル」リンクを選択します。
  2. US/US-8 Concrete Design for a Space Frame.STDを選択して「開く」をクリックします。
  3. 「解析と設計」リボンタブで、「解析」グループの「解析を実行」ツールを選択します。 このマクロは、解析結果があることを前提にしています。
  4. Microsoft Office ExcelでC:\Users\Public\Public Documents\STAAD.Pro 2023\SamplesSample Models\OpenSTAAD\Rectangle-Beam.xlsファイルを開きます。
    注記: ファイルにマクロが含まれているため、Excelで警告が表示されます。「セキュリティの警告」メッセージ領域で「オプション」ボタンをクリックすると「Microsoft Officeセキュリティオプション」ダイアログが開くので、「このコンテンツを有効にする」オプションを選択して「OK」をクリックします。
  5. 「STAAD.Pro Output」ワークシートを選択します。

    耐力をチェックするための計算は"Concrete"とマークされたシートにあり、STAADから抽出された値は"STAAD.Pro Output"とマークされたシートに格納されます。

  6. セルB7にメンバー番号を入力します。 既定ではメンバー14が入力されています。
  7. 「Results」をクリックします。 STAAD.Proの結果がビームサイズとともにスプレッドシートに読み込まれます。その後、Concreteワークシートが選択されます。
Concreteワークシートの残りの部分では、モーメントと寸法に基づいて、選択したメンバーのコンクリートビーム設計を実行します。

Excelマクロコード

OpenSTAADマクロの動作を確認するには、開発者ツールを使用してVisual Basic Editorを開きます。 OpenSTAADExampleという名前のマクロが作成されています。これは、ビームのスパン方向の最大サグモーメント、およびビームの断面の幅と深さを取得するマクロです。各荷重ケースの最大サグモーメントが抽出され、最大モーメントの最大圧縮モーメントが支配モーメントになります。2番目のClearという名前のマクロは、スプレッドシートのセルから結果をクリアします。

OpenSTAADExample

Sub OpenSTAADExample()

    Dim objOpenSTAAD As Object
    Dim stdFile As String
    Dim BaseUnit As Integer
    Dim strLength As String, strForce As String
    
    Dim PrimaryLCs As Integer, LoadCombs As Integer, totalLoads As Integer
    Dim EndForceArray(6) As Double
    Dim lEnd As Long
    
    Dim MemberNo As Long
    Dim Length As Double, Depth As Double, Width As Double
    Dim DMin As Double, dMinPos As Double, DMax As Double, dMaxPos As Double
    Dim Ax As Double, Ay As Double, Az As Double, Ix As Double, Iy As Double, Iz As Double
    
    Dim i As Integer, j As Integer
        
    'Launch OpenSTAAD Object
    Set objOpenSTAAD = GetObject(, "StaadPro.OpenSTAAD")
    
    'Load your STAAD file - make sure you have successfully run the file
    objOpenSTAAD.GetSTAADFile stdFile, "TRUE"
    If stdFile = "" Then
        MsgBox "This macro can only be run with a valid STAAD file loaded.", vbOKOnly
        Set objOpenSTAAD = Nothing
        Exit Sub
    End If

    Cells(2, 2).Value = stdFile
    
    MemberNo = Cells(7, 2).Value
    
    'Check the member exists
    Length = objOpenSTAAD.Geometry.GetBeamLength(MemberNo)
    
    If Length = 0 Then
        MsgBox "Please check the member number is valid.", vbOKOnly
        Set objOpenSTAAD = Nothing
        Exit Sub
    End If
    
    'Find out how many primary load cases and load combinations you have:-
    PrimaryLCs = objOpenSTAAD.Load.GetPrimaryLoadCaseCount()
    Cells(4, 2).Value = PrimaryLCs
    
    LoadCombs = objOpenSTAAD.Load.GetLoadCombinationCaseCount
    Cells(5, 2).Value = LoadCombs
    
    totalLoads = PrimaryLCs + LoadCombs
    
    If totalLoads > 10 Then
        MsgBox ("This macro is designed for up to 10 load cases only")
        Set objOpenSTAAD = Nothing
        Exit Sub
    End If
         
    'What are the units?
    BaseUnit = objOpenSTAAD.GetBaseUnit
    If BaseUnit = 1 Then ' English
        strLength = "Feet"
        strForce = "KIP"
    Else                 ' Metric
        strLength = "Metre"
        strForce = "KN"
        MsgBox ("This macro is designed for up English units. Change STAAD.Pro>Configuration>Base Unit")
        Set objOpenSTAAD = Nothing
        Exit Sub
    End If
    
    Cells(4, 6) = strLength
    Cells(5, 6) = strForce
    
    'Iterate through your load sets to find the results for each load case
    Dim lstLoadPrimaryNums() As Long
    ReDim lstLoadPrimaryNums(PrimaryLCs)
    Dim lstLoadCombinationNums() As Long
    ReDim lstLoadCombinationNums(LoadCombs)
    
    Dim lstLoadNum() As Long
    Dim lstLoadName() As String
    ReDim lstLoadNum(totalLoads)
    ReDim lstLoadName(totalLoads)
    
    objOpenSTAAD.Load.GetPrimaryLoadCaseNumbers lstLoadPrimaryNums
    objOpenSTAAD.Load.GetLoadCombinationCaseNumbers lstLoadCombinationNums
    
    For i = 0 To PrimaryLCs - 1
        lstLoadNum(i) = lstLoadPrimaryNums(i)
        lstLoadName(i) = objOpenSTAAD.Load.GetLoadCaseTitle(lstLoadPrimaryNums(i))
    Next i
        
    For i = 0 To LoadCombs - 1
        lstLoadNum(i + PrimaryLCs) = lstLoadCombinationNums(i)
        lstLoadName(i + PrimaryLCs) = objOpenSTAAD.Load.GetLoadCaseTitle(lstLoadCombinationNums(i))
    Next i
    
    'LoadPrevious = 0
    For i = 0 To totalLoads - 1
        Cells(10, i + 2).Value = lstLoadNum(i)
        Cells(11, i + 2).Value = lstLoadName(i)
        
        'Get forces at start of member
        lEnd = 0
        objOpenSTAAD.Output.GetMemberEndForces MemberNo, lEnd, lstLoadNum(i), EndForceArray
        For j = 0 To 5
            'Print the result values in specified cells
            Cells(j + 13, i + 2).Value = EndForceArray(j)
        Next
        
        'Get forces at end of member
        lEnd = 1
        objOpenSTAAD.Output.GetMemberEndForces MemberNo, lEnd, lstLoadNum(i), EndForceArray
        For j = 0 To 5
            'Print the result values in specified cells
            Cells(j + 20, i + 2).Value = EndForceArray(j)
        Next
         'objOpenSTAAD.GetMinBendingMoment MemberNo, "MZ", LoadNext, MaxSaggingMoment
        objOpenSTAAD.Output.GetMinMaxBendingMoment MemberNo, "MZ", lstLoadNum(i), DMax, dMaxPos, DMin, dMinPos
        Cells(27, i + 2).Value = DMin
    Next
    
    'Write the appropriate dimensions (for the beam) in the correct cells
    Sheets("Concrete").Select
    
    'Get Depth and Width of Concrete Beam
    objOpenSTAAD.Property.GetBeamProperty MemberNo, Width, Depth, Ax, Ay, Az, Ix, Iy, Iz
    'Depth
    Cells(31, 7).Value = Depth
    'Width
    Cells(32, 7).Value = Width
    
    Set objOpenSTAAD = Nothing
    
End Sub

Clear

Sub Clear()
Dim i As Integer
Dim j As Integer

Cells(2, 2) = ""
Cells(4, 2) = 0
Cells(5, 2) = 0

Cells(4, 6) = ""
Cells(5, 6) = ""

For i = 1 To 10
    For j = 1 To 18
        Cells(j + 9, i + 1) = " "
    Next j
Next i

End Sub